package com.example.demo.conifg;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;

import static org.springframework.security.config.Customizer.withDefaults;

@Configuration
public class WebSecurityConfig {
//    以下两个管理器只能使用一个，上面是内存管理，下面是基于数据库管理
//    @Bean
//    public UserDetailsService userDetailsService() {
//        //创建基于内存的用户信息管理器
//        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
//        //使用manager管理UserDatails对象
//        manager.createUser(
//                User.withDefaultPasswordEncoder().username("user").password("password").roles("USER").build()
//        );
//    return manager;
//    }
//    @Bean
//    public UserDetailsService userDetailsService() {
//        //创建基于数据库的用户信息管理器
//        DBUserDetailsManager manager = new DBUserDetailsManager();
//        return manager;
//    }
//    默认配置，不设置也生效
    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
//        开启授权保护
        http
            .authorizeHttpRequests(authorize->authorize
                    //c对所有请求开启授权保护
                    .anyRequest()
                    //已认证的请求会自动授权
                    .authenticated()
            )
                //自动授权表单样式 登录，登出页面
                //.formLogin(withDefaults())
                //使用基本授权方式
                .httpBasic(withDefaults());
        return http.build();

    }
}
